/**
 * 
 */
package com.nari.baseinfo.dao;

import java.util.List;
import java.util.Map;

import com.nari.baseinfo.model.IHeatRoom;
import com.nari.baseinfo.utils.IBuildingFloorEntity;
import com.nari.coreframe.dao.hibernate3.IGenericDao;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface IHeatRoomDao extends IGenericDao<IHeatRoom, String> {

	/**
	 * 分页查询热用户列表
	 * @param houseNo 门牌号(可选)
	 * @param roomOwner 户主姓名(可选)
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-26
	 */
	public ResultWithPageCond<IHeatRoom> queryHeatRoomPage(String houseNo, String roomOwner,
			String projectUID, String communityUID, PageCond pageCond) throws Exception;
	
	/**
	 * 通过热用户所属关系(所属项目、所属楼栋、所属分摊域)查询热用户列表
	 * 若项目ID、楼栋ID、分摊域ID均不存在，则返回空列表
	 * @param projectUID 项目ID(可选)
	 * @param communityUID 所属小区(可选)
	 * @param shareAreaUID 分摊域ID(可选)
	 * @param buildingUID 楼栋ID(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-19
	 */
	public List<IHeatRoom> queryHeatRoomsByBelongs(String projectUID, String communityUID,
			String shareAreaUID, String buildingUID) throws Exception;
	
	/**
	 * 通过热用户所属关系(所属项目、所属楼栋、所属分摊域)查询热用户列表
	 * 若项目ID、楼栋ID、分摊域ID均不存在，则返回空列表
	 * @param projectUID 项目ID(可选)
	 * @param communityUID 所属小区(可选)
	 * @param shareAreaUID 分摊域ID(可选)
	 * @param buildingUID 楼栋ID(可选)
	 * @param ifMeasureCharge 是否参与分摊(可选)
	 * 1:不参与		2:参与
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-30
	 */
	public List<IHeatRoom> queryHeatRoomsByBelongs(String projectUID, String communityUID,
			String shareAreaUID, String buildingUID, Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 通过热用户ID列表查询热用户信息
	 * @param idList 热用户ID列表，若ID列表为空，则返回空
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-13
	 */
	public List<IHeatRoom> queryHeatRoomsByIDList(List<String> idList) throws Exception;
	
	/**
	 * 通过热用户ID列表查询热用户ID-热用户门牌号映射表
	 * @param idList 热用户ID列表，若列表为空，则返回一个空映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-13
	 */
	public Map<String, String> queryIdNameMapByIDList(List<String> idList) throws Exception;
	
	/**
	 * 通过分摊域等信息分页查询热用户列表
	 * @param shareAreaUID 所属分摊域(必选)
	 * 说明：若分摊域ID不存在，则返回零结果集
	 * @param houseNo 热用户门牌号(可选)
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param pageCond
	 * @return
	 * @author Xiaopeng
	 * @date 2013-8-21
	 */
	public ResultWithPageCond<IHeatRoom> queryHeatRoomPageByAreaUID(String shareAreaUID, 
			String houseNo, String projectUID, String communityUID, String buildingUID, 
			PageCond pageCond) throws Exception;
	
	/**
	 * 查询不隶属于某个分摊域下的热用户列表
	 * @param shareAreaUID 所属分摊域(必选)
	 * 说明：若分摊域ID不存在，则返回零结果集
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param houseNo 热用户门牌号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResultWithPageCond<IHeatRoom> queryRoomPageExceptAreaUID(String shareAreaUID, 
			String projectUID, String communityUID, String buildingUID,String houseNo, 
			PageCond pageCond) throws Exception;
	
	/**
	 * 批量设置热用户所属分摊域信息
	 * @param shareAreaUID 所属分摊域
	 * @param roomIDList 热用户ID列表，格式：XXX,XXX,XXX
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-3
	 */
	public ResponseMsg saveHeatRoomArea(String shareAreaUID, String roomIDList) throws Exception;
	
	/**
	 * 通过所属分摊域统计热用户数量
	 * @param shareAreaUID
	 * @param ifMeasureCharge
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public int countHeatRoomsByAreaUID(String shareAreaUID, 
			Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 通过所属分摊域查询热用户列表
	 * @param shareAreaUID 所属分摊域(必填)
	 * @param ifMeasureCharge 是否参与计量收费
	 * 说明：1:不参与		2:参与
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public List<IHeatRoom> queryHeatRoomsByAreaUID(String shareAreaUID, 
			Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 通过所属分摊域统计热用户建筑面积之和
	 * @param shareAreaUID
	 * @param ifMeasureCharge
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public double sumRoomStructAreaByAreaUID(String shareAreaUID, 
			Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 通过所属分摊域统计热用户供热面积之和
	 * @param shareAreaUID
	 * @param ifMeasureCharge
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public double sumRoomHeatAreaByAreaUID(String shareAreaUID, 
			Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 通过所属楼栋统计热用户建筑面积之和
	 * @param buildingUID
	 * @param ifMeasureCharge
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public double sumRoomStructAreaByBuildingUID(String buildingUID, 
			Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 通过所属楼栋统计热用户供热面积之和
	 * @param buildingUID
	 * @param ifMeasureCharge
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public double sumRoomHeatAreaByBuildingUID(String buildingUID, 
			Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 根据热用户所属关系统计热用户的个数
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param shareAreaUID 所属分摊域(可选)
	 * @param ifMeasureCharge 是否参与计量收费(可选)
	 * @return
	 * @author Xiaopeng
	 * @date 2013-10-21
	 */
	public int countRoomSumByBelongs(String projectUID, String communityUID, String buildingUID, 
			String shareAreaUID, Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 根据热用户所属关系统计热用户的建筑面积之和
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param shareAreaUID 所属分摊域(可选)
	 * @param ifMeasureCharge 是否参与计量收费(可选)
	 * @return
	 * @author Xiaopeng
	 * @date 2013-10-21
	 */
	public double sumRoomStructAreaByBelongs(String projectUID, String communityUID, String buildingUID, 
			String shareAreaUID, Integer ifMeasureCharge) throws Exception;
	
	/**
	 * 通过分摊域ID查询所属热用户ID列表
	 * @param shareAreaUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public String queryRoomUIDListByAreaUID(String shareAreaUID) throws Exception;
	
	/**
	 * 通过分摊域ID查询所属热用户对应单元ID列表
	 * @param shareAreaUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public String queryUnitUIDListByAreaUID(String shareAreaUID) throws Exception;
	
	/**
	 * 通过分摊域ID查询所属热用户对应楼栋ID列表
	 * @param shareAreaUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public String queryBuidlingUIDListByAreaUID(String shareAreaUID) throws Exception;
	
	/**
	 * 通过分摊域ID查询所属热用户对应楼层ID列表
	 * 楼层ID编码：楼栋ID-单元ID-楼层
	 * @param shareAreaUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public String queryFloorUIDListByAreaUID(String shareAreaUID) throws Exception;
	
	/**
	 * 通过单元ID查询楼层实体
	 * @param unitUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public List<IBuildingFloorEntity> queryFloorListByUnitUID(String unitUID) throws Exception;
	
	/**
	 * 通过楼层ID查询所属的热用户列表
	 * 楼层ID编码：楼栋ID-单元ID-楼层
	 * @param floorUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public List<IHeatRoom> queryRoomListByFloorUID(String floorUID) throws Exception;
	
	/**
	 * 取消分摊域所属范围（项目、小区）内热用户的分摊域信息
	 * @param projectUID 分摊域所属项目
	 * @param communityUID 分摊域所属小区
	 * @param shareAreaUID
	 * @param belongAreaRoomIDList 隶属于该分摊域的热用户
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public void deleteAreaRoomArchitect(String projectUID, String communityUID, 
			String shareAreaUID, String belongAreaRoomIDList) throws Exception;
	
	/**
	 * 设置热用户所属的分摊域
	 * @param shareAreaUID
	 * @param belongAreaRoomIDList
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-12-20
	 */
	public void saveAreaRoomArchitect(String shareAreaUID, String belongAreaRoomIDList) throws Exception;
	
	/**
	 * 查询热用户信息
	 * @param houseNo
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-12
	 */
	public IHeatRoom queryRoomInfoByhouseNoBuildingUID(String houseNo, 
			String buildingUID) throws Exception;
	
	/**
	 * 根据热用户ID级联删除关联信息
	 * 包括：热用户、系统用户及角色、分配表、散热器、温度点、用户分摊账单
	 * 注意：热量表数据、分配表数据等表计数据具有不可恢复性，因此不能作为级联删除的对象
	 * @param roomUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-20
	 */
	public ResponseMsg deleteCascadeByRoomUID(String roomUID) throws Exception;
}
